package nan.List;

import java.util.*;

public class PokerGame {

    //创建一个数组，使用这个数组把四种花色都提前准备好
    public static final String[] suits={"♥","♣","♠","♦"};
    //创建一个poker顺序表存放很多张牌
    public static List<Card> buyPoker(){
        List<Card> poker=new ArrayList<>();//向上转型   poker中元素类型是Card
        //外层for循环处理花色
        for(int i=0;i<4;i++){
            //内层for循环处理每一种花色对应的13张牌
            for(int j=2;j<=10;j++){
                //顺序表里面可以增加新的牌
//                Card pai1 = new Card(suits[i],String.valueOf(j));
//                poker.add(pai1); ;//需要将j int型转为字符串型
                poker.add(new Card(suits[i],String.valueOf(j)));
            }
            poker.add(new Card(suits[i],"J"));
            poker.add(new Card(suits[i],"Q"));
            poker.add(new Card(suits[i],"K"));
            poker.add(new Card(suits[i],"A"));
        }
        poker.add(new Card(" ","dawang"));
        poker.add(new Card(" ","xiaowang"));
        return poker;
    }
    //List自身是可变对象，直接修改poker的内容就会对List本身造成影响，
    // 就不需要额外返回List<Card>
    private static void shuffle(List<Card> poker){
        Random random=new Random();
        for(int i=poker.size()-1;i>0;i--){//最后一个元素为size-1
            //产生[0,i)的随机数，要和哪个位置的元素交换
            int pos= random.nextInt(i);//每次取到当前元素的时候，就把当
            // 前元素和前面一个随机位置的元素进行交换。
            swap(poker,i,pos);//i为当前元素，pos随机
        }
    }
    private static void swap(List<Card> poker,int i,int j){
        Card tmp=poker.get(i);
        poker.set(i,poker.get(j));
        poker.set(j,tmp);
    }
    public static void main(String[] args) {
        //1.需要先创建出一幅扑克牌
        List<Card> poker=buyPoker();
        System.out.println(poker);
        //2.洗牌
        shuffle(poker);
        //Collections.shuffle(poker);
        System.out.println(poker);
        //3.发牌，假设有三个玩家，每个玩家发5张牌
        //每个玩家手里有5张牌，这5张牌就使用另外一个ArrayList
        List<Card> player1= new ArrayList<>();
        List<Card> player2= new ArrayList<>();
        List<Card> player3= new ArrayList<>();
        //此时可以把三个玩家都放在一个List中
        List<List<Card>> players = new ArrayList<>();//players类型仍然是List，
        // 泛型参数是一个List<Card>,即每个元素就是一个List<Card>
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());
        for(int i=0;i<5;i++){//5张牌
            for(int j=0;j<3;j++){//3个玩家
                Card top=poker.remove(0);//每次取出牌堆中最上面的牌
                List<Card> player=players.get(j);//得到第i个玩家
                player.add(top);//把这张牌放到对应的玩家手里
                System.out.println(player);
            }
        }
        //4.展示牌
        for(int i=0;i< players.size();i++){
            List<Card> player = players.get(i);
            System.out.println(i+"玩家的手牌是"+player);
        }
    }
}
